#!/usr/bin/env node

const path = require('path');
const fs = require('fs');
const { program } = require('commander');
const packageJson = require('./package.json');
const download = require('download-git-repo');
const chalk = require('chalk');
const ora = require('ora');
const symbols = require('log-symbols');
const inquirer = require('inquirer');
const handlebars = require('handlebars');

program.version(packageJson.version);

program
    .command('init')
    .description('项目初始化命令')
    .action(() => {
        inquirer.prompt([
            {
                'type': 'input',
                'message': '请输入项目名称',
                'default': path.basename(__dirname),
                'name': 'name'
            },
            {
                'type': 'input',
                'message': '请输入项目初始版本号',
                'default': 'v1.0.0',
                'name': 'version'
            },
            {
                'type': 'input',
                'message': '请输入描述',
                'name': 'description'
            },
            {
                'type': 'input',
                'message': '请输入关键字',
                'name': 'keywords'
            },
            {
                'type': 'input',
                'message': '请输入作者',
                'name': 'author'
            },
            {
                'type': 'input',
                'message': '请输入开源协议',
                'default': 'MIT',
                'name': 'license'
            },
            // {
            //     'type': 'list',
            //     'name': 'isTypeScript',
            //     'message': '项目是否使用TypeScript？',
            //     'choices': [
            //         { value: true, name: '使用' },
            //         { value: false, name: '不使用' },
            //     ],
            //     'default': 0,
            //     'loop': true
            // },
            // {
            //     'type': 'list',
            //     'name': 'isTest',
            //     'message': '项目是否使用测试框架？',
            //     'choices': [
            //         { value: true, name: '使用' },
            //         { value: false, name: '不使用' },
            //     ],
            //     'default': 0,
            //     'loop': true
            // },
        ]).then(answers => {
            // if (answers.isTypeScript) {
            //     if (answers.isTest) {
            //         useTsAndTest(answers)
            //     } else {

            //     }

            // } else {
            //     if (answers.isTest) {

            //     } else {

            //     }
            // }

            useTemplate(answers);
        })

    });

program.parse(process.argv);

function useTemplate(answersObj) {
    inquirer.prompt(
        [
            {
                'type': 'list',
                'name': 'templateUrl',
                'message': '选择要使用的模板？',
                'choices': [
                    { value: 'direct:https://gitee.com/dkjc007/pawn.git', name: 'Pawn：是一个通用的基础框架，TS + Mocha + chai' },
                    { value: 'direct:https://gitee.com/dkjc007/demacia.git', name: 'Demacia：是一个通用的npm包基础框架，TS + Mocha + chai，主要用于制作lib库' },
                    { value: 'direct:https://gitee.com/dkjc007/olaf.git', name: 'olaf：是一个通用的基础框架，仅包含TypeScript和Mocha+chai测试框架' },
                ],
                'default': 0,
            },
        ]
    ).then(answers => {
        create_project(answers.templateUrl, answersObj)
    })
}

function useTsAndTest(answersObj) {
    inquirer.prompt(
        [
            {
                'type': 'list',
                'name': 'templateUrl',
                'message': '选择要使用的模板？',
                'choices': [
                    { value: 'direct:https://gitee.com/dkjc007/olaf.git', name: 'olaf：是一个通用的基础框架，仅包含TypeScript和Mocha+chai测试框架' },
                ],
                'default': 0,
            },
        ]
    ).then(answers => {
        create_project(answers.templateUrl, answersObj)
    })
}



function create_project(url, answersObj) {
    const cliProcess = ora('正在创建...')
    download(url, answersObj.name, { clone: true }, function (err) {
        if (err) {
            cliProcess.fail()
            console.log(symbols.error, chalk.red('创建失败'))
            console.log(symbols.error, chalk.red(err))
        } else {
            cliProcess.succeed();
            const fileName = `${answersObj.name}/package.json.hbs`
            const targetFileName = `${answersObj.name}/package.json`
            const meta = {
                name: answersObj.name,
                author: answersObj.author,
                version: answersObj.version,
                description: answersObj.description,
                license: answersObj.license
            }
            if (fs.existsSync(fileName)) {
                const content = fs.readFileSync(fileName).toString()
                const result = handlebars.compile(content)(meta);
                fs.writeFileSync(targetFileName, result);
                fs.unlinkSync(fileName);
            }
            console.log(symbols.success, chalk.green('创建成功'))
        }
    });
}